#include <lvgl.h>
#include <TFT_eSPI.h>
#include "ui.h"

static const uint16_t screenWidth = 240;
static const uint16_t screenHeight = 320;
static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[screenWidth * screenHeight / 10];
TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight); /* TFT instance */

/* Display flushing */
void my_disp_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
{
 uint32_t w = (area->x2 - area->x1 + 1);
 uint32_t h = (area->y2 - area->y1 + 1);
 tft.startWrite();
 tft.setAddrWindow(area->x1, area->y1, w, h);
 tft.pushColors((uint16_t *)&color_p->full, w * h, true);
 tft.endWrite();
 lv_disp_flush_ready(disp_drv);
}

void setup()
{
 lv_init();
 tft.begin(); /* TFT init */
 // tft.setRotation( 3 ); /* Landscape orientation, flipped */
 lv_disp_draw_buf_init(&draw_buf, buf, NULL, screenWidth * screenHeight / 10);
 /*Initialize the display*/
 static lv_disp_drv_t disp_drv;
 lv_disp_drv_init(&disp_drv);

 /*Change the following line to your display resolution*/
 disp_drv.hor_res = screenWidth;
 disp_drv.ver_res = screenHeight;
 disp_drv.flush_cb = my_disp_flush;
 disp_drv.draw_buf = &draw_buf;
 lv_disp_drv_register(&disp_drv);

 /* Create simple label */
 lv_obj_t *label = lv_label_create( lv_scr_act() );
 lv_label_set_text( label, "Hello Ardino and LVGL!");
 lv_obj_align( label, LV_ALIGN_CENTER, 0, 0 );
 ui_init();
}


void loop()
{
 lv_timer_handler(); /* let the GUI do its work */
 delay(5);
}
